//package com.github.config;
//
//import com.github.util.SocketSendThread;
//import com.zaxxer.hikari.HikariDataSource;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.CommandLineRunner;
//import org.springframework.core.env.Environment;
//import org.springframework.jdbc.core.JdbcTemplate;
//import org.springframework.stereotype.Component;
//
//import java.sql.Connection;
//import java.sql.SQLException;
//
//@Component
//public class ConfigChecker implements CommandLineRunner {
//    // 在控制器或服务中添加测试
//    private final Logger logger = LoggerFactory.getLogger(getClass());
//
//    // 注入环境变量（可获取所有配置项）
//    @Autowired
//    private Environment env;
//
//    // 注入数据源（HikariCP）
//    @Autowired
//    private HikariDataSource hikariDataSource;
//
//    // 注入JdbcTemplate（验证数据库连接）
//    @Autowired
//    private JdbcTemplate jdbcTemplate;
//
//    // 服务器配置
//    @Value("${server.port:8080}")
//    private int serverPort;
//
//    @Value("${server.tomcat.max-threads:200}")
//    private int tomcatMaxThreads;
//
//    // 数据库连接池配置
//    @Value("${spring.datasource.hikari.maximum-pool-size:10}")
//    private int hikariMaxPoolSize;
//
//    @Value("${spring.datasource.hikari.minimum-idle:5}")
//    private int hikariMinIdle;
//
//    // MyBatis配置
//    @Value("${mybatis.configuration.map-underscore-to-camel-case:false}")
//    private boolean mapUnderscoreToCamelCase;
//
//    @Value("${mybatis.configuration.log-impl:}")
//    private String mybatisLogImpl;
//
//    // WebSocket配置（若有）
//    @Value("${spring.websocket.messaging.broker.relaying.enabled:false}")
//    private boolean websocketBrokerEnabled;
//
//    @Override
//    public void run(String... args) throws Exception {
//        logger.info("\n======= 配置验证结果 =======");
//
//        // 1. 服务器配置验证
//        validateServerConfig();
//
//        // 2. 数据库连接池配置验证
//        validateHikariConfig();
//
//        // 3. 数据库连接有效性验证
//        validateDatabaseConnection();
//
//        // 4. MyBatis配置验证
//        validateMyBatisConfig();
//
//        // 5. WebSocket配置验证
//        validateWebSocketConfig();
//
//        // 6. 其他自定义配置（示例）
//        validateCustomConfig();
//
//        logger.info("===========================\n");
//    }
//
//    private void validateServerConfig() {
//        logger.info("\n【服务器配置】");
//        logger.info("端口: " + serverPort + "（配置值），实际启动端口: " + env.getProperty("local.server.port"));
//        logger.info("Tomcat最大线程数: " + tomcatMaxThreads);
//        logger.info("是否一致: " + (serverPort == Integer.parseInt(env.getProperty("local.server.port")) ? "是" : "否"));
//    }
//
//    private void validateHikariConfig() {
//        logger.info("\n【Hikari连接池配置】");
//        logger.info("配置的最大连接数: " + hikariMaxPoolSize + "，实际值: " + hikariDataSource.getMaximumPoolSize());
//        logger.info("配置的最小空闲连接: " + hikariMinIdle + "，实际值: " + hikariDataSource.getMinimumIdle());
//        logger.info("连接池名称: " + hikariDataSource.getPoolName());
//        logger.info("连接超时时间(ms): " + hikariDataSource.getConnectionTimeout());
//        logger.info("是否一致: " + (hikariMaxPoolSize == hikariDataSource.getMaximumPoolSize() ? "是" : "否"));
//    }
//
//    private void validateDatabaseConnection() {
//        logger.info("\n【数据库连接验证】");
//        try (Connection connection = hikariDataSource.getConnection()) {
//            String dbName = jdbcTemplate.queryForObject("SELECT DATABASE()", String.class);
//            logger.info("数据库连接成功，当前库: " + dbName);
//            logger.info("连接状态: 有效");
//        } catch (SQLException e) {
//            logger.info("数据库连接失败: " + e.getMessage() + "，状态: 无效");
//        }
//    }
//
//    private void validateMyBatisConfig() {
//        logger.info("\n【MyBatis配置】");
//        logger.info("驼峰命名转换: " + (mapUnderscoreToCamelCase ? "启用" : "未启用"));
//        logger.info("日志实现类: " + (mybatisLogImpl.isEmpty() ? "默认" : mybatisLogImpl));
//        logger.info("是否启用SQL日志: " + (mybatisLogImpl.contains("StdOutImpl") ? "是" : "否"));
//    }
//
//    private void validateWebSocketConfig() {
//        logger.info("\n【WebSocket配置】");
//        logger.info("消息代理是否启用: " + (websocketBrokerEnabled ? "是" : "否"));
//        // 若使用STOMP，可添加更多验证（如端点路径）
//    }
//
//    private void validateCustomConfig() {
//        logger.info("\n【自定义配置】");
//        // 示例：验证JWT配置（若有）
//        String jwtSecret = env.getProperty("jwt.secret", "未配置");
//        logger.info("JWT密钥是否配置: " + (jwtSecret.equals("未配置") ? "否" : "是"));
//
//        // 示例：验证文件上传路径
//        String uploadPath = env.getProperty("app.upload-path", "未配置");
//        logger.info("文件上传路径: " + uploadPath);
//    }
//}